题解:P14566 【MX-S12-T1】取模

265 字
1 分钟
题解:P14566 【MX-S12-T1】取模

题面传送门:P14566 【MX-S12-T1】取模

题目大意#

选取一个正整数 pp 使 aa 数组中各项对这个正整数取模的结果的极差(即最大值与最小值的差)最大

思路讲解#

由上文可知,本题是一个找最值的题目,因此考虑贪心

贪心具体分两种思路:

  1. 取模结果极差最大,则先找到 aa 数组中的最大值 maxxmaxx,正整数 pp 则为 maxx+1maxx+1。此时的结果为 aa 数组的最大值-最小值
  2. 我们发现思路1无法通过样例3和4,此时考虑将pp直接定为 maxxmaxx,此时 aa数组中取模结果最小值为 00,最大值为 aa数组中的次大值

我们将这两种思路所得结果进行比较即可。

AC代码#

#include<bits/stdc++.h>
using namespace std;
int t,n,a[100005],b1[100005],b2[100005],maxx;
int main(){
cin>>t;
for(int z=1;z<=t;z++){
cin>>n;
maxx=-1;
for(int i=1;i<=n;i++){
cin>>a[i];
maxx=max(maxx,a[i]);
}
for(int i=1;i<=n;i++){
b1[i]=a[i]%(maxx+1);
if(maxx!=0) b2[i]=a[i]%maxx;//防止对0取余时报错
}
sort(b1+1,b1+n+1);//可改为打擂台找最值
sort(b2+1,b2+n+1);;//可改为打擂台找最值
cout<<max(b1[n]-b1[1],b2[n]-b2[1])<<endl;
}
return 0;
}

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

题解:P14566 【MX-S12-T1】取模
https://zhedaotixuanbo.pages.dev/posts/题解:P14566 【MX-S12-T1】取模/
作者
zhedaotixuanbo
发布于
2025-11-22
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
zhedaotixuanbo
这道题选什么? _____!
公告
分类
标签
站点统计
文章
17
分类
1
标签
21
总字数
6,295
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
Cloudflare Pages
博客版本
ZTXB v1.0.0
文章许可
CC BY-NC-SA 4.0